/**************************************************************************//**
 * @item     CosyOS-II Hook
 * @file     init_hook.c
 * @brief    初始化钩子
 * @detail   在主函数中首先被调用，适用于初始化时钟、GPIO、寄存器等工作。
 * @author   迟凯峰
 * @version  V3.0.0
 * @date     2024.06.25
 ******************************************************************************/

#include "..\System\os_link.h"

#define BAUD 115200
#define TM2 (65536 - SYSCFG_SYSCLK) 

void init_hook(void)
{
	// 将所有IO设置为准双向口
    P0M0 = 0; P0M1 = 0;
    P1M0 = 0; P1M1 = 0;
    P2M0 = 0; P2M1 = 0;
    P3M0 = 0; P3M1 = 0;
    P4M0 = 0; P4M1 = 0;
    P5M0 = 0; P5M1 = 0;
    P6M0 = 0; P6M1 = 0;
    P7M0 = 0; P7M1 = 0;
    
    AUXR = 0X00;    // 允许访问内部xdata
    P_SW2 = EAXFR;  // 允许访问扩展RAM区的特殊功能寄存器
    
    TMOD = 0X00;
    AUXR = 0X45;
    S2CON = 0X40;
    
    /* 定时器2 */
    T2L = (u8)TM2;
    T2H = (u8)(TM2 >> 8);
    AUXR |= T2R;
    
    /* UART2 中断优先级为3 **/
    IP2H |= PS2H;
    IP2 |= PS2;
    
    /* UART2 中断优先级为3 **/
    IPH &= ~PXOH;
    PXO = 0;
    
    /* 任务管理器 */
    #if SYSCFG_DEBUGGING == 1
    S2CON |= S2REN;
    IE2 |= ES2;
    #endif
    
    
    
}

#if SYSCFG_DEBUGGING == 1
void UART2_Isr(void) interrupt 8
{
    if(S2CON & S2TI) {
        S2CON &= ~S2TI;
        if (*s_debug_sendptr) {
            S2BUF = *s_debug_sendptr++;
        } else {
            iDebugSend;
        }
    }
    
    if(S2CON & S3RI) {
        S3CON &= ~S2RI;
        if(s_debug_recvptr - s_debug_recvbuff < OS_DEBUGRECVBUFFSIZE - 1) {
            *s_debug_recvptr++ = S2BUF;
        }
        iDebugRecv;
    }
}
#endif
